package main

import "fmt"

// 单个返回值
func foo1(a string, b int) int {
	fmt.Println("a=", a)
	fmt.Println("b=", b)
	c := 100
	return c
}

// 多个返回值,匿名的（无形参名）
func foo2(a string, b int) (int, int) {
	fmt.Println("a=", a)
	fmt.Println("b=", b)
	return 666, 777
}

// 多个返回值，有形参名
func foo3(a string, b int) (r1 int, r2 int) {
	fmt.Println("---foo3----")
	fmt.Println("a= ", a)
	fmt.Println("b=", b)

	//r1,r2 属于foo3的形参，初始化默认的值为0
	//此时的r1和r2的作用域是foo3整个函数体的{}里
	fmt.Println("r1=", r1)
	fmt.Println("r2=", r2)

	// 给所有的名称的返回值变量赋值
	r1 = 1000
	r2 = 2000
	return

	//return 1000,2000
}

// 形参可以简写
func foo4(a string, b int) (r1, r2 int) {
	fmt.Println("---foo3----")
	fmt.Println("a= ", a)
	fmt.Println("b=", b)

	// 给所有的名称的返回值变量赋值
	r1 = 1000
	r2 = 2000
	return
}

func main() {
	c := foo1("abc", 555)
	fmt.Println("c= ", c)
	ret1, ret2 := foo2("cba", 999)
	fmt.Println("ret1 = ", ret1, "ret2 = ", ret2)

	ret1, ret2 = foo3("foo3", 333)
	fmt.Println("ret1 = ", ret1, "ret2 = ", ret2)

}
